﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CONTROLADORA;
using MODELO;

namespace VISTA
{
    public partial class frmABMUsuarios : FormABMBase
    {
        dtsUsuarios usuario;
        dtsUsuarios.UsuarioRow usuarioRow;

        Usuarios controladoraUsuario = new Usuarios();

        public frmABMUsuarios()
            : base()
        {
            InitializeComponent();
        }

        public frmABMUsuarios(ModoABM modo, int id)
            : base(modo, id)
        {
            InitializeComponent();
        }


        protected override void InicializarControles()
        {
            
        }

        protected override void CargarEntidad()
        {
            usuario = controladoraUsuario.GetUsuarioPorID(ID);
            if (usuario != null && usuario.Usuario.Count != 0)
            {
                usuarioRow = usuario.Usuario[0];
                this.txtNombreUsuario.Text = usuarioRow.NombreUsuario;
                this.txtNombre.Text = usuarioRow.NombreApellido;
                this.txtContrasenia.Text = usuarioRow.Contrasenia;
                this.txtNroDocumento.Text = usuarioRow.NroDocumento;
            }
            this.grdGrupos.DataSource = usuario.Usuario_Grupo;
        }

        protected override void CrearEntidad()
        {
            usuario = new dtsUsuarios();
            usuarioRow = usuario.Usuario.NewUsuarioRow();
            this.RefrezcarCambios();
            usuario.Usuario.AddUsuarioRow(usuarioRow);
            this.grdGrupos.DataSource = usuario.Usuario_Grupo;
        }


        protected override void GuardarEntidad()
        {
            switch (this.Modo)
            {
                case ModoABM.Alta:
                    this.RefrezcarCambios();
                    break;
                case ModoABM.Modificar:
                    this.RefrezcarCambios();
                    break;
                case ModoABM.Eliminar:
                    usuarioRow.Delete();
                    break;
                case ModoABM.Consultar:
                    break;
                default:
                    break;
            }

            controladoraUsuario.GuardarEntidad(usuario);
        }

        private void RefrezcarCambios()
        {
            usuarioRow.Contrasenia = this.txtContrasenia.Text;
            usuarioRow.NombreApellido = this.txtNombre.Text;
            usuarioRow.NombreUsuario = this.txtNombreUsuario.Text;
            usuarioRow.NroDocumento = this.txtNroDocumento.Text;
        }


        private void btnAgr_Click(object sender, EventArgs e)
        {
            // agrego grupo a la tabla de grupos.
            if (this.cmbGrupo.SelectedValue == null)
            {
                MessageBox.Show("Debe seleccionar al menos un grupo a agregar.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            
            dtsUsuarios.Usuario_GrupoDataTable usuarioGrupo = this.grdGrupos.DataSource as dtsUsuarios.Usuario_GrupoDataTable;
            int idGrupo = (int)this.cmbGrupo.SelectedValue;

            if (usuarioGrupo.FindByID_UsuarioID_Grupo(usuarioRow.ID_Usuario, idGrupo) == null)
            {
                usuarioGrupo.AddUsuario_GrupoRow(usuarioRow, idGrupo, this.cmbGrupo.Text);
            }
            else
            {
                MessageBox.Show("El grupo a agregar ya está asignado al usuario.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }

        private void btnEliminarGrupo_Click(object sender, EventArgs e)
        {
            // agrego grupo a la tabla de grupos.
            if (this.grdGrupos.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar al menos un grupo a eliminar.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            dtsUsuarios.Usuario_GrupoDataTable usuarioGrupo = this.grdGrupos.DataSource as dtsUsuarios.Usuario_GrupoDataTable;
            int idGrupo = ((this.grdGrupos.SelectedRows[0].DataBoundItem as DataRowView).Row as dtsUsuarios.Usuario_GrupoRow).ID_Grupo;

            var usuarioGrupoEliminar = usuarioGrupo.FindByID_UsuarioID_Grupo(usuarioRow.ID_Usuario, idGrupo);

            if (usuarioGrupoEliminar != null)
            {
                usuarioGrupoEliminar.Delete();
            }
        }

        private void chkMostrarPassword_CheckedChanged(object sender, EventArgs e)
        {
            if (this.chkMostrarPassword.Checked)
            {
                this.txtContrasenia.PasswordChar = '\0';
            }
            else
            {
                this.txtContrasenia.PasswordChar = '*';
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (this.validationProvider.Validate())
            {
                base.EjecutarAccion(AccionABM.Guardar);
            }
            else
            {
                this.validationProvider.ValidationMessages(true);
            }
        }

        private void btnCan_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}